/* eslint-disable jsdoc/check-param-names */
import request from '../request'
import type { AppletUserInfoDto, DecryptPhoneDto, FindUserDto, LogoutRecordDto, OcrDto, QueryUserInfoDto, RegisterFailDto, UserDataDto, UserDto } from './type'
import type { PlatformEnum } from '@/constant/enum'

// export function register(data: FindUserDto) {
//     return request.post('/api/v1/blue/user/alipay-add', data) as Promise<UserDto | string>
// }

/**
 * 获取微信小程序用户信息
 *
 * @param data 请求参数
 * @param data.appId 小程序应用ID
 * @param data.code 登录凭证（用户登录后获取的 code）
 * @returns 返回小程序用户信息
 */
export function getAppletUserInfo(data: {
    appId: string
    code: string
}) {
    return request.post('/api/v1/wx/getAppletUserInfo', data) as Promise<AppletUserInfoDto>
}

/**
 * 获取支付宝小程序用户信息
 *
 * @param data 包含code字段的对象
 * @param data.code 登录凭证（用户登录后获取的 code）
 * @returns 返回Promise对象，解析后得到AppletUserInfoDto类型的数据
 */
export function getAppletUserInfoAlipay(data: {
    code: string
}) {
    return request.post('/api/v1/wx/getAlipayAppletUserInfo', data) as Promise<AppletUserInfoDto>
}

/**
 * 获取微信小程序用户信息
 *
 * @param data 包含appId和code的对象
 * @param data.appId 微信小程序appId
 * @param data.code 微信小程序登录凭证（code）
 * @returns 返回Promise<AppletUserInfoDto>，即微信小程序用户信息的数据传输对象
 */
export function getAppletUserInfoWx(data: {
    appId: string
    code: string
}) {
    return request.post('/api/v1/wx/getAppletUserInfo', data) as Promise<AppletUserInfoDto>
}

/**
 * 获取用户信息
 *
 * @param data 包含openId和platform的对象
 * @param data.openId 用户的openid
 * @param data.platform 平台标识，0微信，1支付宝
 * @returns 返回Promise<AppletUserInfoDto>，包含用户信息的对象
 */
export function getUserInfo(data: {
    openId: string
    platform: 0 | 1
}) {
    return request.post('/api/v1/blue/user/find', data) as Promise<UserDto>
}

/**
 * 支付宝获取解密后的手机号
 *
 * @param data 包含响应数据的对象
 * @param data.response 响应数据
 * @returns 返回解密后的手机号信息
 */
export function getDecryptPhone(data: {
    response: string
}) {
    return request.post('/api/v1/wx/decrypt-phone-num', data) as Promise<DecryptPhoneDto>
}

/**
 * 支付宝注册 修改实名信息
 *
 * @param data 支付宝注册参数，可传入一个对象或FindUserDto类型的参数  FindUserDto修改实名信息参数
 * @param data.idCardNo 身份证号码，可选
 * @param data.alipayOpenId 支付宝用户openid，可选
 * @param data.phone 手机号码，可选
 * @param data.userName 用户名，可选
 * @param data.userId 用户id，可选
 * @param data.id id，可选
 * @returns 返回一个Promise对象，包含以下类型：
 *          - 数字类型，表示状态码
 *          - 一个对象，包含code和msg属性，分别表示状态码和消息
 *          - UserDto类型，表示用户信息
 *          - 字符串类型，表示返回的错误信息
 */
export function aliPayRegister(data: {
    idCardNo?: string
    alipayOpenId?: string
    phone?: string
    userName?: string
    userId?: string
    id?: string
} | FindUserDto) {
    return request.post('/api/v1/blue/user/alipay-add', data) as Promise<number | RegisterFailDto | UserDto | string>
}

/**
 * 查询我的页面工作记录、我的报名、我要预支、工资单的数据
 *
 * @returns 返回 Promise<QueryUserInfoDto> 类型的用户信息
 */
export function queryUserInfo() {
    return request.get('/api/v1/blue/user/query-user-info') as Promise<QueryUserInfoDto>
}

/**
 * 获取用户实名认证的信息
 *
 * @returns 返回用户数据信息的Promise对象
 */
export function getUserData() {
    return request.get('/api/v1/blue/user-other-info/find-emergency-contact') as Promise<UserDataDto>
}

/**
 * 查找用户信息
 *
 * @returns 返回用户信息的Promise对象
 */
export function findUserInfo() {
    return request.get('/api/v1/blue/user/find-user-info') as Promise<FindUserDto>
}

/**
 * OCR识别OSS上的身份证图片并返回用户信息
 *
 * @param data 包含身份证图片OSS路径的对象
 * @param data.idCard 身份证图片base64
 * @returns 返回Promise类型的FindUserDto，表示OCR识别后返回的用户信息
 */
export function ocrOss(data: {
    idCard: string
}) {
    return request.post('/api/v1/blue/user/ocr-oss', data) as Promise<OcrDto>
}

/**
 // eslint-disable-next-line jsdoc/check-param-names
 * @param data.userName  姓名
 * @param data.bankCardNo  卡号
 * @param data.openBankAddress 开户银行
 * @param data.openBankName  银行名称
 * @param data.openBankBranch  开户行支行
 * @param data.openBankCity  开户城市
 * @param data.bankCardImg  银行卡照片
 * @returns 返回
 */
// 添加银行卡 /api/v1/blue/user/insert-bank-card-no
export function insertBankCardNo(data: {
    userName?: string
    bankCardNo?: string
    openBankAddress?: string
    openBankName?: string
    openBankBranch?: string
    openBankCity?: string
    bankCardImg?: string
}) {
    return request.put('/api/v1/blue/user/insert-bank-card-no', data)
}

// 注销
export function putUserDelete() {
    return request.put('/api/v1/blue/user/logout')
}

/**
 * 设置用户头像URL
 *
 * @param data 包含用户头像URL的对象
 * @param data.userHeadUrl 用户头像URL
 * @returns 返回请求结果
 */
export function putHeadUrl(data: {
    userHeadUrl: string
}) {
    return request.put('/api/v1/blue/user/head-url', data)
}

/**
 * 获取是否有审核中的注销申请
 *
 * @param data 用户账号信息
 * @param data.phone 用户的手机号
 * @param data.idCardNo 用户的身份证号码
 * @param data.plaform 支付平台，0表示微信，1表示支付宝
 * @param data.alipayOpenId 用户的支付宝OpenId
 * @returns 返回校验结果
 */
export function checkUsrAccount(data: {
    phone: string
    idCardNo: string
    platform: PlatformEnum.WEIXIN | PlatformEnum.ALIPAY
    alipayOpenId: string
    userName: string
}) {
    return request.post('/api/v1/blue/user/check-user-account', data) as Promise<string | RegisterFailDto | null>
}

/**
 * 查询注销记录
 *
 * @param data 查询参数
 * @param data.idCardNo 身份证号
 * @returns 返回注销记录信息
 */
export function queryLogoutRecord(data: {
    idCardNo: string
}) {
    return request.get('/api/v1/logout/apply/record/query-logout-record', data) as Promise<LogoutRecordDto>
}

/**
 * 添加登出记录
 *
 * @param data 包含用户登出记录信息的对象
 * @param data.idCardNo 用户身份证号
 * @param data.idCardFront 用户身份证正面图片地址
 * @param data.userPhoto 用户照片地址
 * @param data.applyRemark 申请备注
 * @param data.phone 用户手机号码
 * @returns 返回添加登出记录的结果，结果为字符串类型
 */
export function addLogoutRecord(data: {
    idCardNo?: string
    phone?: string
}) {
    return request.get('/api/v1/blue/user/check-idCard-phone', data) as Promise<boolean>
}
